package cn.jbolt.core.para;

import cn.jbolt.core.bean.JBoltDateRange;
import cn.jbolt.core.util.JBoltArrayUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.jfinal.json.Json;
import com.jfinal.kit.StrKit;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

/**
 * JBolt平台封装的参数包装器
 *
 * @ClassName: JBoltParam
 * @author: JFinal学院-小木 QQ：909854136
 * @date: 2020年3月18日
 */
@SuppressWarnings("serial")
public class JBoltPara extends JSONObject {
	private String rawData;

	public JBoltPara(String rawData) {
		if (StrKit.notBlank(rawData)) {
			this.rawData = rawData;
			JSONObject datas = JSON.parseObject(rawData);
			if (datas != null) {
				putAll(datas);
			}
		}
	}

	public JBoltPara(Map<String, String[]> paraMap) {
		if (paraMap != null && paraMap.isEmpty() == false) {
			for (Entry<String, String[]> entry : paraMap.entrySet()) {
				String[] values = entry.getValue();
				String value = (values != null && values.length > 0) ? values[0] : null;
				put(entry.getKey(), "".equals(value) ? null : value);
			}
		}
	}

	/**
	 * 得到原始rawdata
	 *
	 * @return
	 */
	public String getRawData() {
		if (StrKit.isBlank(rawData) && isEmpty() == false) {
			this.rawData = Json.getJson().toJson(this);
		}
		return this.rawData;
	}

	/**
	 * 获取JBoltDateRange
	 * @param key
	 * @param type
	 * @return
	 */
	public JBoltDateRange getJBoltDateRange(String key,String type){
		return new JBoltDateRange(key, getString(key), type);
	}

	/**
	 * 获取JBoltDateRange
	 * @param key
	 * @return
	 */
	public JBoltDateRange getJBoltDateRange(String key){
		return new JBoltDateRange(key, getString(key), JBoltDateRange.TYPE_DATE);
	}

	/**
	 * 获取字符串数组
	 * @param key
	 * @return
	 */
	public String[] getStringArray(String key) {
		JSONArray jsonArray = getJSONArray(key);
		return jsonArray==null?null:jsonArray.toJavaObject(String[].class);
	}
	/**
	 * 获取字符串列表List
	 * @param key
	 * @return
	 */
	public List<String> getStringList(String key) {
		JSONArray jsonArray = getJSONArray(key);
		return jsonArray==null?null:jsonArray.toJavaList(String.class);
	}
	/**
	 * 获取Int列表List
	 * @param key
	 * @return
	 */
	public List<Integer> getIntList(String key) {
		JSONArray jsonArray = getJSONArray(key);
		return jsonArray==null?null:jsonArray.toJavaList(Integer.class);
	}
	/**
	 * 获取Long列表List
	 * @param key
	 * @return
	 */
	public List<Long> getLongList(String key) {
		JSONArray jsonArray = getJSONArray(key);
		return jsonArray==null?null:jsonArray.toJavaList(Long.class);
	}
	/**
	 * 获取BigDecimal列表List
	 * @param key
	 * @return
	 */
	public List<BigDecimal> getBigDecimalList(String key) {
		JSONArray jsonArray = getJSONArray(key);
		return jsonArray==null?null:jsonArray.toJavaList(BigDecimal.class);
	}

	/**
	 * 获取Int数组
	 * @param key
	 * @return
	 */
	public Integer[] getIntArray(String key) {
		JSONArray jsonArray = getJSONArray(key);
		return jsonArray==null?null:jsonArray.toJavaObject(Integer[].class);
	}
	/**
	 * 获取Long数组
	 * @param key
	 * @return
	 */
	public Long[] getLongArray(String key) {
		JSONArray jsonArray = getJSONArray(key);
		return jsonArray==null?null:jsonArray.toJavaObject(Long[].class);
	}

	/**
	 * 获取BigDecimal数组
	 * @param key
	 * @return
	 */
	public BigDecimal[] getBigDecimalArray(String key) {
		JSONArray jsonArray = getJSONArray(key);
		return jsonArray==null?null:jsonArray.toJavaObject(BigDecimal[].class);
	}
	/**
	 * 获取参数里组合字符串分割转数组 String
	 *
	 * @param key
	 * @param split
	 * @return
	 */
	public String[] getStringToArray(String key, String split) {
		return JBoltArrayUtil.from3(getString(key), split);
	}

	/**
	 * 获取参数里组合字符串分割转数组 默认逗号分隔符 String
	 *
	 * @param key
	 * @return
	 */
	public String[] getStringToArray(String key) {
		return getStringToArray(key, ",");
	}

	/**
	 * 获取参数里组合字符串分割转数组 Integer
	 *
	 * @param key
	 * @param split
	 * @return
	 */
	public Integer[] getStringToIntArray(String key, String split) {
		return JBoltArrayUtil.toInt(getString(key), split);
	}

	/**
	 * 获取参数里组合字符串分割转数组 默认逗号分隔符 Integer
	 *
	 * @param key
	 * @return
	 */
	public Integer[] getStringToIntArray(String key) {
		return getStringToIntArray(key, ",");
	}

	/**
	 * 获取参数里组合字符串分割转数组 Long
	 *
	 * @param key
	 * @param split
	 * @return
	 */
	public Long[] getStringToLongArray(String key, String split) {
		return JBoltArrayUtil.toLong(getString(key), split);
	}

	/**
	 * 获取参数里组合字符串分割转数组 默认逗号分隔符 Long
	 *
	 * @param key
	 * @return
	 */
	public Long[] getStringToLongArray(String key) {
		return getStringToLongArray(key, ",");
	}

	/**
	 * 获取参数里组合字符串分割转数组 BigDecimal
	 *
	 * @param key
	 * @param split
	 * @return
	 */
	public BigDecimal[] getStringToBigDecimalArray(String key, String split) {
		return JBoltArrayUtil.toBigDecimal(getString(key), split);
	}

	/**
	 * 获取参数里组合字符串分割转数组 默认逗号分隔符 BigDecimal
	 *
	 * @param key
	 * @return
	 */
	public BigDecimal[] getStringToBigDecimalArray(String key) {
		return getStringToBigDecimalArray(key, ",");
	}
}
